<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.4.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/%E8%BF%AA.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/%E8%BF%AA.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">
  <link rel="stylesheet" href="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"zhengyidi.github.io","root":"/","scheme":"Pisces","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":true,"show_result":"flat","style":null},"back2top":{"enable":true,"sidebar":true,"scrollpercent":true},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":true,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},"path":"search.xml"};
  </script>

  <meta name="description" content="程序出错该返回啥？NULL、异常、错误码、空对象？">
<meta property="og:type" content="article">
<meta property="og:title" content="06.程序出错该返回啥？">
<meta property="og:url" content="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/06.%E7%A8%8B%E5%BA%8F%E5%87%BA%E9%94%99%E8%AF%A5%E8%BF%94%E5%9B%9E%E5%95%A5%EF%BC%9F/index.html">
<meta property="og:site_name" content="Zhengyidi&#96;s 学习记录">
<meta property="og:description" content="程序出错该返回啥？NULL、异常、错误码、空对象？">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2021-07-10T00:00:00.000Z">
<meta property="article:modified_time" content="2021-11-13T14:58:22.494Z">
<meta property="article:author" content="zhengyidi">
<meta property="article:tag" content="设计模式">
<meta name="twitter:card" content="summary">

<link rel="canonical" href="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/06.%E7%A8%8B%E5%BA%8F%E5%87%BA%E9%94%99%E8%AF%A5%E8%BF%94%E5%9B%9E%E5%95%A5%EF%BC%9F/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>06.程序出错该返回啥？ | Zhengyidi`s 学习记录</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

<link rel="alternate" href="/atom.xml" title="Zhengyidi`s 学习记录" type="application/atom+xml">
</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">Zhengyidi`s 学习记录</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">休对故人思故国，且将新火试新茶。诗酒趁年华。</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
        <i class="fa fa-search fa-fw fa-lg"></i>
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>首页</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-fw fa-tags"></i>标签</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-fw fa-th"></i>分类</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>归档</a>

  </li>
      <li class="menu-item menu-item-search">
        <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
        </a>
      </li>
  </ul>
</nav>



  <div class="search-pop-overlay">
    <div class="popup search-popup">
        <div class="search-header">
  <span class="search-icon">
    <i class="fa fa-search"></i>
  </span>
  <div class="search-input-container">
    <input autocomplete="off" autocapitalize="off"
           placeholder="搜索..." spellcheck="false"
           type="search" class="search-input">
  </div>
  <span class="popup-btn-close">
    <i class="fa fa-times-circle"></i>
  </span>
</div>
<div id="search-result">
  <div id="no-result">
    <i class="fa fa-spinner fa-pulse fa-5x fa-fw"></i>
  </div>
</div>

    </div>
  </div>

</div>
    </header>

    


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/06.%E7%A8%8B%E5%BA%8F%E5%87%BA%E9%94%99%E8%AF%A5%E8%BF%94%E5%9B%9E%E5%95%A5%EF%BC%9F/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="zhengyidi">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Zhengyidi`s 学习记录">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          06.程序出错该返回啥？
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>

              <time title="创建时间：2021-07-10 00:00:00" itemprop="dateCreated datePublished" datetime="2021-07-10T00:00:00+00:00">2021-07-10</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                <span class="post-meta-item-text">更新于</span>
                <time title="修改时间：2021-11-13 14:58:22" itemprop="dateModified" datetime="2021-11-13T14:58:22+00:00">2021-11-13</time>
              </span>
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" itemprop="url" rel="index"><span itemprop="name">设计模式</span></a>
                </span>
            </span>

          
            <div class="post-description">程序出错该返回啥？NULL、异常、错误码、空对象？</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look.">
  <script id="hbeData" type="hbeData" data-hmacdigest="ded1c87b702d0a532588ba623a7bba47fa8b5f488ced98435ee8a751c698444c">22064b17c03cb0c0e58c99349b6889d074c8ad9187858b93562e92a8a30ecfd6805766a7face7d04f65ffdd253281ea0b94db666aad75269a0df64d562ed467a25c6c20aa767133ee0e3b0dfdc9fbdd75fd6b6230ea312d7be37507410680babbf4e83dc43d8b1110f05b477a6488dafc1f05c0e4ab3fbfd108cf620029d5acf9f0552b7c1877d84872689bbd49d57c02fa5b23b5a15f003be5d5aba2fee9ef900c03d3ae0b4a4f57401334a139f331852e579826bce347cb5a7f3887bd4740ecdfdfe85261bc068866752e6d2accf662da802c894794670fa542e24e5498fd14110faaa35ecdc038f8befc536c98f84ec1b26347b5c38b3f3685fc8802afbc7066454d3359c07c1bf28e004a8dd3f7d364a0de74fcda10107ac35f6b30ab6c0b91ffbe8725aed2dbb573d6bb6a9512e216c37f67e100f68dd9669f63483ca6ca4505a73bf938833253f5e39bddb0b26533498d7df5b8364a71cea2be75da296657e95b879c5439ea54a42581a643894d020377de493b5d777c8eb3bfd53ce4c02bbc3784e1ac860ec6fd1073996f3f7cb3bc64faef5692c14166e21136b83884617ddf2de31ae49e202e2823be887e2bda91933daef4dba3b05466acf3c09badf0f636cfc66ab0eebfd4d73ccd700a793cff0db11655294b8d6df8bd9a771bc148b746754755dff696dbdb79127cd2088f5687fcaffd5d3a323068a440027b68f3afb37b2eba15cf3f14db7e1849aab6b00b64f55540bfaac0d622a5b67df88422581c92255b53dc668fe7504780ff6e58e8d0f449ab4e519a8820a4453086fe86464a0c24b9b56be62aaa0ec885a24b3263dd891e2ec02d441d119435f2f9f4d56fd25b5ae088a557f0673aa634d3135d4e87bf0e2c881914a2f6a10d98226187995ddc0c38f14c6563b7ef9323813acf853072abd162916fc9753c99fa9f0f399a462dbd9464b081dec0085ab3a01c2b1786a7bb81d06cf9ffaefaee3974f4151b169d164d1df192f157e4240b5e9251ff3a3ed4cba6824bc351efefcb33cd0962b6089f7af4855c32b869015671abcdad8b6395f1dfcb22d42c3a6b9c3f19960181c6c3137f5dd3a6b1f62aa94b10a3a0311816d7449262ada29ddd2aef15f493c77acb5b44d5bb28c60cfbaa61fc16e0afa340d835b764f0974b35772b7d9ef54ed509f995bfce0128ab4724a304f2a30be993f928b4d220ce2115fc99005ed9b55ed81edc40201aaf3c1b090d1bf8e973f03df7b182f4d8f3878f30cc4937450ce8d4e74468db451d3fc3d45a94ee6ae84fb437e1def92f5f25d67ce9dd968a6c7d32e09040ef8202b3c0759a6f2cd248950b4531d37b2425e0c913765a37342cce6705da59e611d3f734c71c866949bb79af446caae316f8ddafba096299c95fc0c1de672ed00356d33614c641683ea11abb04dcaf982d915986f71920639d1edbf51e3f3b907168a3cfef1a69ccee636341f9476ce9f396fb707c7feea37b94106d3af51c6d36f95f3e182651bef081bd1306300fb4c36caba9ad993222c1c308cdf6f26c47ea2cafbae3bff0ba566076747c65baea9aacb1ed56892a63d37d8c63e3c31e1516cf1e694478072370404279b5355edeb691f0ff173f4ca09ae9022a94248fd3806117380a88dfa47f30037a0f95d90f19247fd41e1ffa64c687abf470f8b1a6fafbb53519323577770dbb8be3764ce8e2839c4bd511746021c3d961109ca5660a8910e953c8cfc86e7d257ba0191e5978e2d24cdc4c1643fa36a1523f31f270d389c38e95fb7ab8db92952134bbbeda7e544b217a23ee6ba6700c29252fb87af70d50a7b41db3e0fc1181ee9929ee632107bdb0575b171e8a45c71c787467e36839b7dd24310c49ba90cad9106b019a687ae925a9a52d52282d9a484cc870783e182fa0c21038ab4dec14884b8dc5eb926d8aee0dcbd3d6b46e36515eb0969d5c9f1a7d9c11c4963142cccb95d14bfd4e8fd00b0cb0fcf5af29c465a7c60ef9ab34c51b3ff29307476b66ec3dc13ab075be1ab1130d707de147210d2b627385521f88efbe06fe68357aba0c0336a401da664a6e50e6e4f2ba1f3542f05e1738e6a95880713559c7c6a7b4343e6f046c2c99e6757e54ef689fecf84ea4f5925f9f5116c6b20900ab4872b10aa12f33805b71d5958176c65c16463b9b92e15d146662b766998409046165279fcdaaff3df9d5f0aedbad31bd72af2019da5654db54b54cfd42ce602492e2d3ae9c115cd91fd23b3fa83d1e57705406a95410b395365312b2e4273a44d1af373690bcf3ded6648d58c610d1d0aa722b517f7c7459f252ce0774acc9a530cc48baf50982bc5f6a473be59cc2074b11b590ed729c6946ef9cd3f249173c9fde87d3b1f443cec1dde9300aef15685f19d785887f97701f13196ccf2a42d112baf3d2322d60424b9cd12fdbc76edbdcd307924397c94ef5ac0152005e4fec269a173d796431c0592f311a82804612bb7940b0da35b09061765405f4a8a8ed3b7dca648e3a9984fa4658a3671eb1a2486796a666cb07b27192f193355399280552a1f7385e2b8634d082e8464855468ec354b28d2d1f2759a2e36cdc894c5b1141004abb15731cde6d8ebc37ab3028245cbfd31cd6af9631ea44854062a395c56a1511259a203c3281464ec6e62a05373b8d9157664a49dff18423be393f4593153ce7f0590ff090f9f268108057ac3228a3544e4192eb7bfbd98f965a9c91b3e571c49cd9d311c6e50958d2c73a56d905762bf63ec5914ff33b971f3b4402d4ba55f25399f6bf930cdcb62ec3c759bffb19480f7f1b2ee75aa0f230a551b73d6e97d960364941b2d7c1f96f2173e859866d5e55a51e9fbc2fc4ffc6af056f45432f782948adc00075fa1ab0f2e4bf05032cd8937ea09eb1c583a011367ec0bd42c225ee7b22b78e895e00d94e9ffbe6ff8b298dd8ed7983ba5db017a272ace3e4bda0784233fa2be0ab5e824731d2c90f4a6e7762d208c06de33521ebdfd4f692ffff42c5834c1d25115bc0d8481b6e0db5cde4d1bfcdca00b83dc394882204572cfc076cd7c21b78e8aaa19eef9acf384cbc7e0a66691072e69895f382f66c49124bab11accdeae3e8440c4ff4bc8f48ef4ab4f418f35ed252b7ef1cc6408d920616a02e4bff87e715c44b8e0baf75e4b381ea47b940f3292c833500148ba6ff2a07138b655d3aad9b4892f65ab89b879d4faa6f15125cc3d6da6713ae5bf5ee2bbab3959a22b40f13767e6e72cde361d498639518470f4e24fa1792aee80a5509f6ce5bb96f93431c2ec39eeaa6ec3b46bf46aef150ec2f13848e4c97430d28c56bad3ad4b99ed4dd852a2831dfad1df1d69dedd3e96a800f302776f8002628670e702b89459f4dc09e8100a18c1de296ee23f177be6811c4252b22271a768053094e5165c3a189186f6c6ce9886424edeaffc21027f7972759fcec5f09c9006f5ce8acede7a1f9cd6efa124e77a22cfbcb876277bdb3dcc103996647f8d6de544f0518060e9ecf2338e1e1dbb8e447d4b7595e7b4f904cc24261e6d6fa15cde85fa0e2664cbbb45929ae99b76e3a6a92889404e4f9620d94b7a2a675a1acec752aaea54dd8086f56b7fe9174aa7aac1e5d6d2008cf6332da212717e48cdac126cbc4c4d5e4d286654089a8884a91beaaba86227a7ae315a2b911f51dd116c13a0213fb9509aebe023df11cbc021b2eec4febd8caba6d7cc2c61deea71c3bcd548d94ecff0440d8d9467464fbc58ecadc2bd521d75a7ecdbc0da8db9cff2722e9c5b041153cd25c6698e1095478e98e6189819b2eb7d4861e91372635723db34c1c9597118edb1ef645591c005ff42a9be7eef9ec8687da7f22f1af0b33c13b0dde0a9570a5594f6b93cd365276a0d0055dae800714d8018a7e1597131d4e8578956d982e3fa36eb83071087117d064b4f72f6b8168ee624d1f6c3a76af7f2b0b3fc1a27516297fc3edb23223a8b5e4569d210b731709d77535e6a369cf817fec6cc3d9be6639df04e690cb2f96c0108fe6bd150fcba6f8905d990d8dc3a2cc4aed49b766101d26a1ce36745e4b7c5d2018b4295f99c713eb6fcd31228085a55c7e6ad86adb8b898efa3ae45b7364a292907652f7d8ac5fb3be9b636f67ff777b00bb6e15c4588c0c78058c5915f2bae2d50e005d67e188ebc3d51a2cb9ccea5c8f2f4badb170ab379517f4df16c11f07b7ef4dd1c3d3daa4a614580cb31bce4a2b59c15d5c6df7aa93fdf1820a3b84636bddbd204061da5622b8f55cba702a0b57e1a08488c70cb671a2dc21ef112406fc4249ecd3095bcbb2f42e2797a72dbbbe26cdeb5b16279e9f745be9bce4b343e053e0f4b7b776598b06fadac02db4ee67365247bcac502895ca722a3698861b0936406ce54e461983fc8313a7073ff9ce15296215fd679ff55174b26c81250d41999b984cff7b0e2675704def8ea8f007f824809ee079931e2817d8fe7f5a74b57dec7e0d19d4349ebc64afe523e3d346063cead43ce2e31c682a1c247a6cbb84c3197880d5ccc9eb4b0811d23152aa66af70675bd27bb50d9265ce969889b2c486d4f92e7f2a87379b6a10f4128ca337abaeeb8975abae96aaf7a5bf93a4e2c36f68a75abbe101c61a2f691ffe64306038d50b10c5066995768b58a62b65e6ca08d86811d8598669230c70d561a269a6ccc926dbe8d00065aa2db8de21c3a256f4dd650fa67a0916189f5f42522dfa0e00bf46afe6b59abe5d6a6d97024af79ad2041c1ab3e3061b5b49ff95baf59e57138efc01be5a691f8115e2c242bc4dd65b982aa05b8b1145124948c641e5ca2736b5b20bd01522557aea6f976a005204c41d5b0901f16be6215c119bf35a805887e68499cd9416e9afdf2a2e97132b451895becfe37635ae35e2c4fe5ebd12b4f751ce6db167fd01257ea770f0fc7b5a688a82e215f96487a116f7143581c8bfae6c4f678fc9764849afbad6a8d0192d35d25d9ccb7d5f134652b8232fe5f140685ac3e6fcf9d43174f88eab9780d1a428686af62a8f4d51ebcd61d818e6f7f96098068ec8860b712dc422b8bdd6d8a0e46a9c6b47bf9dfb8bff386e86f5a16ce0d49c42b44a88b17e27daf02da3faea1ddf7cee4b6d551c7edf1735d96284baf088bcc74c8353886dd1a32a2e2d929071c8af35a5786642d9a370c5085133a8f979915e2326e7b94b9a1531001dfff69af9c59d9cdb4a86a0067e4c1f048f6a40efd521bf85dafbcc32c0dc33471722ba6b20c215c8868bbd1be14e1b6fbfdf484b798a208652ca3b54cfb508ead77fe2afcdc75a8767846b0d752c80a6a2c5afa0ca5d7bf47127f477035d09bd636ff8de33d72258a217a97997d07b24543c5f9bbf971ee45fc4067e0871ce7cc99f81d109416d133173d72d69fdc813a0bf4b890723aebd7fe62fdc6ad2ae0d34a34be7f7ce3bfb92dc260cec35936d74e4d714fc6f8a1eb5a1a0a1da0347000afe9ce77373c76ad2628e0654a104df8fcd592c48fbd1a1329bc1a8befd0930bcce53ca7fff17b1e346754fda608024ef1decf32f92aa70019808b23be08ed466e9a93b5034fe881d2e822a79e551bab71c8b01f9d9f1092313963d61ac1f494cac390834c45b56ea6a217fcfe2da40ce7268694289313e091bf2f7f9dd2db99c84c2618261f8736007931fc9a0c98bdbf9dda267840f710f33136784c105ce1460addce301842d4334638e889a280da57b626760a74b1606bc0db674cdbe05b0e9a8b01ef550f78af56e992d3bb3a5ef454d47ef1500cfc2ed0415db2d454afd908a65d8db68e4a8ef2641a929aab62abc3b3e76be0794e0c050d753974108aee9fda46cf587784702a626a76f5a1650726ed283dc59d36e051a8a4b4201ee45033e274a05e66ce220262a3ef5c84197a750d9b5a00fa7a2a8ac5f4acf44f45a168dcc78de5ce8953ad0c0a1953a88f7ccedede695b53ffa0dad3d385f361b87cff2c6bc259313809c21fe9c417bb3bbe6d7be5907b0d99ef5d6936125074bc03d81a27fa3e35d168c698857404b9624a053de4724bf9ace44e2c597c58e96b613e6bdadfcd6ada811f4bf8a3b68c9efea8fddc7b13e00f7d03706d2b55f1382aa6fb90f6bbd0e81ebe5639ea53f6fa269b022a39314758174f93630be9eec039b60e6b0764130eac8178290a900e54b7235581b06d213195701dafe280d69499b0bca5df1e5e80111191cc499c117aee0abd5d66e44eb0b09331892c935660920c278093a18f2fd9214cf43b2e8ffd5dec9e9356e571401acb782e426b98af0e6582506eaab16cc1b422548b5c86e703579305e46edb3e07b3c3986d4212e341698c9a8f2ceeb7d992b980e3378e21d252ea8df1770ccb118dd94347d1867affe210a21269b07b74b4087f5f96037e2eba9cf2535a39563659211334a727380c9efa9e43afcee7b947d0c66a3435d8f625b0db952b94d8c6bc567ae4fd97876392186b1237f88da0e892f464c6ce0174bf65d64fa1a4fdec807cab26416f545f8699d930030b07ec794f553945fa48ebaa1d034a384e78cc0e3ead97187a4fe6200f9f786f6b00afd8fe90da7dbd212e0bec81d94b9e912baf806dc871c9b8153912943176846aa68ce22789cc27d5229640563c42eed3d13c4d7b763100dc0a154846b747badac2ead120b41b31dce71b3e1ee5075e2346ba1b255ca28f2c6de4055277c19516a4502f688898a7237c88e490690c7f493c65013ff01cb0484e1cc6da9f808573a49b43baf8d01c32dcb64295b63d56b77e0934e4dd4d136314c0970aaaa2a1e3a6f4bdc7480e19a90bcd54718b933409759f927fe7aaf6d33ef04a7c0346460bfd14e73152bf20ca56eadeaec4f193333d09fb21f3c05eb370fac41f6282d98c580dc33e7e0a9594368858960122bcf997282e4dd40454ba77e608660992a3d7bed9f8ba37e778854aec5e090098e0f98b405d2df1d2ce212d89936a2e911fc9302a438e54f754275139d6e4eed730306b5b6a1daea4a24215c1266e12d64faa0a68d0d221d0152007c569574fdd922a7dd4934ac5a9c293783775c46fa5ea8a3cb485c0fef2ac7f8ade3609ba99cb51f4e9a83766f8d2502e5964ea0d2e30b0e9efb7f69d0f90afd45578c020ec4a057d8448a12062888ef74f07b4581e44723103203ef2b741c9010f29b339fc906dc6db53f39a449bbc4b281351999a950a58a729c48b4b477ff9f5ddd581598ffcbae1d9420a87234cdd58532e0a2aea5c17559c1ec6668cee646714394cf0df5c07c650caaa6a23248cc4ebf9a56489e50505536120304e2f97c4ba34c31e82b5ecb5c6c299021db67068634ca26881c9a6d3dfecc798e7bb39442ead67d5f8243045ac0e5d4b16c3ee3a70d5b8a76d996ebe5c9dbebf9dfc4a47cd05df1a1aaacf69165fd37a620f21c5cca0aab0a666027bcb481c898159015169ed9a1c4ec7744525cd3a95e032cdc91374a229aed4b7f80a969cfa17c3b37f66ed5df4ad571cf393a7c6744b2beb7a374adff7bce20a9739e428b825738e5c120d95348960d0d4244f1388e6d150943913dde014058f6beb34235c4b433aee03c51bbc6248ab208676efcfe7007dfac6c7e10186f9129af507eab3f8b85e01aa2354c2f8a5545ddff9e74bef069b5fb6ec362ef224789dbab95a0069f716dea24f3283ee2b05973cac648c17140cd78d75b0fdd7c9ac55f5ee32ec65a8a3e2273121d3ddb107866af7973ce2b329790b5f1352774c33a1ffc017ee0ba5f417db5fb22caa694abc31f8d69dd94b75508da0d5e4f49595851a94144739e0be03b342a9ef17af4e09e16eab1cf7f95238a48e0b0384cb0d3ed4dd96894cf4aff0eb824f854cd8140d31f9444084ab92d51e6c1022733aff34706b5593aa48f998925e0bb1993f4a5bac9efcc7f3af5d149b88ed856aec7a0050b443c1336050f22fe7707c6e4049eb50e7f500a9953f0a564c0c15a49b5fc8023bf541b5c9aa52ddd1971cba6b0f26ff0171e69b4f4b3e075ec7dbc31d540efcd4583c11657b4f1222eeca12c0467fb7cdc08ce8cab414453badecf0b4d211008d32b69ca77ae4205dea4c8ae30d059f4651dc1025119ea126ce956438d864f8f8a1aa7c680f7fb011102f320c7fbd347aad39af5d3caec67c5f7d14d81e41e25e5af680d1bb7c48b6af58ee71368c2f5cf95b3f9739ae593e4b341911e1e40f94046cf29f30dc9278e85d0c89a6267566449c420e6eec5af9194eda3946cea96547b92fa788b69edebc175cefa8e39910804ba6f52a8a68fb88c4ab5376b9702183e61e1bd118822786d46f5ab520dbc166d01e3bc3f09f9a83386b448a6d4ede767a85fc406d5f1206c88cedbd8a37eb4f5ecb7da79e9d6b85e69bbb019004d7741fbda43d9a162c2160f4ae0ed7a0dda557f04a40566e76a9ca26a902d4c2b6b2c6d94c9eab172009fa989194400544dee6add455dcd149bf4a4b9cf691eadde4eb92516af54e08bde3182b282aab8fa54bf3d7add2de535f647d08bebdbf0f0de89ffb6f3e040f6c9f99a0665c22cbf1578145c815a2a698cd708435947225d6fae1936e9b918d82185a8192fa31f794a5a14f2387eda5e8689b0710cacbd8ec2868ff87bf9952cce03cce3cf09dff3772785ee4962b09a50380d2d3958e0fdf1e988dd6e2d8d526a4d4f1a949ce259980584dd721e2a97fa9bfb4994adfbbcdae7b8636c72c21487652801cad740b8524fbdfa3db19720d0e38779d601ce5e53c12182edf5ec12f2f17bf64f0b89f7dd83de380fda32b7e3e1a1e39d1914361c9406e48a71db64d700c4f647e367df58e8fae8050f8b381f76a66924fdefbc40b85d99136b7f83eeecfa269712448bb677b4fb0a24286946f5fb6c24b01ddcc10b29e7e14d461b801f65394f0a528231b6d9459965ac9e00a4a0092300d77ae9196226fc7b3bba9e24262b0bf290fc440a6a110fea0dc29c5df657aaee9463ef7996bed57d19bd180ca13addd78a12a8afc662edcdb948ac0ef3bc72dd415311307d201bb5aae5efdc2675fc2624cdd3251ba6e4ed35596f61b0d03414a2b21ef1baf2d5352c45873573ef751e68567548981a6b88d67ba37d6cade0cc89238574f173a87ac2043a8f68868ea4b3a14471363147954ae1ddf616fc5c3f0437d9aaf8644758aa9aa989f21e973cc3812132340ba90d79c55986c0848c72c8965ad0cb31b4cffed8a4a4fa34ed8f9e795bb66ee0ec730c87f85601e34d7f07ba6be93f43ad5ff080e8c96a1c071e5a29ddaa58eee48452883e19689c23d407c0a22d09f309d55c7302575c85d17da99ccccf2f9c108a90b2e050c5954c7946b32ff49ab9c3bcd6a030acd88fbe9dc3efc9b08a09c06919270139eb33b70cfa052e3648e199f3a0060d7a75214ebf61a01350c133f5a8cd51127de23f8a3e4184f08dbc750c170f26be6908eee41c17d85af3abb4e850ae65d2bf48dcbccd207d73945dc414c1ee88e82aab1a15befd92a8bd96bdec3f0a79704361cd4312495f9329fcf0932a52def361dc2cf4185c4af109efdf159685a84fa365b42a980899477d7e5702adfc62ceaa7080efbd150556ac60c773322f8800ae5520f383c03334cc8d1c5a7bfa22ff8d2adb11532e86f3d398ca035743d0cf538200d2baf0e277e1ad8d34dffeebc85d386fb4101cb77dd0764359238e7d3db25006b1d6e134d0b8f6a730e51174390b5fe7402e052419652a703faacd1558646e2c229981270babfbb81f1e7b62898528f16e05eb81d8f375a47ef7b7874b2c7cc7b0e9fbc9639c156412538033b65a75139549c876d3bfdeed36817fc33e42f00bd36af51a387e2a5324f8466357514d8df72722296bfd53808dadb6985e22c2c1048486d927525ea369ad34143f5809d14aee39f3edb10fbf789c83abee123ae0e7bcd03b987280c243e37fc5645f5e94b2e6c32402d593638113825343c28982c44de22903c8412c3d434ae9d354e13dc41e5d05eafeaa344595ca5f682abb12dddbffbad293311e4642769706d2a9a871a3d6d75f00993b712cdf755bd2360088c6a860ca91951d5c5660f1768606d090b0c99bebfda185102a4c0421f4a2705b2c3226a2a22cdf1cc3100d67abedc34b3133ab2ddaefe4ee4dc52ff8870dfa89e08c5a5746c97cca1af2969f577b339653470f9362b476a67a5f5fea5d7de44b9ca662441f8370d8929d0831d605828b14e66240b36af9208b3d545732df9d1d44325c05a95d4769714704e54eebc77e901b30e1cb73a3140bf34c409470ff423c530525476a15b679bf970737d81c15617749dd22d9c126aa56206e18f0b5486d5576bc8348e0d8bd4ac7b3ce0437b6126dbcb09fc4120860a416bd65ca99da4b9553e3873bfe212264cb6f024e4ec2f54a4a23cfdfe51d076b75cb3dc1f0dfb123e84bbe800f58db0d9ddab36ae48401fbedf49f9cf128ff431d690935d7ed00d7db6ff91d90836bf2c10e2c4a36bfc20dca146b317ed32d3023a7915e50f3e831f4d191bd80b032dc3ac12d6a342c33781d9c4a31b5a6488b380bf39d14f9939ce3e895f42ad8f199f2566b1134d5055d8dd1c1f59be294535e0414feefaafbb0dd2795e6d2cde7e45985b87b4779472701f742887bd3bcbc0ad6553170af40d3948790e153c22bb461cd73af41d071f7c83284839a56b5be4338cbb723884d705db4ce506167911010a276d870b8eceb4ff57040e53717c64312f13c40ef18866aef6da676ecacdfd31aa74ab1e69db43bccd4c581b9cffd4765e9a820867b10a0c751ba07a037b700472358c237a9c4f9cdfac7888b04393131291bf0a73281d71d49a9424f07a8444de3e3a2076ed8b8b0b4d6e3ea3495d6b5e79bd6218e91b704def812ec338ee25425e936d4c8225af58fb8ff4fee0b82074a8d3cb2cfa7b83b786ba2ec0e537359af634168fc711cb3fcadd8b7f8395d96fc72f8b78e13a70af1ca6fa1ca49bbeb064773be7ba9f82483d391756f6bf23ea5a8f00a86742b77661085c0225a1bf91c5b7bfba58345b3d96ddddf21daee9f9ecc19af477b1f45ca5d8cc76d1824929951a4ec59e3f01d0e7bb2c1e408aaf627287b3ce6cb77fbc297ee2b90436c00b5a6f635c324a4f3dedca57f691cf5fd416e690cf1ca1f1d791619b7a007a38cee47eabc9f4ed2ad27322052e81a55b9b5a272bd6691341b56f9c33943393352d029c9da90078d31ae2b787bfd3d87dd5feb819a606420f9b3c5fd5ff3f2c361ec0018b891c5603b71ffad59a69b045027b383add4aca6f444340db088c0daf7c77a9f9406e357a44b21321f251646bb93a743a25cfdd71db215374f1c3510d3e1bd7e0fbd898ddc15bfeea080a2da806db25d39f3890107433423e360a09813b04bd945799b026bfab67d34e6a95762f59acb7e5b3436a3df39e4d28337d9e5a164e190c4e99743f94134b5ed3fd9926f29cdade9c154693e4387efffaa1fa07015ebde9f6f9876942cb2ba1c78912476dc4560ee9d33ed397964d1075bd06d94d2188cd6ac75ddf32e6b40577e34fe8398145f673f81927ceaace46435662e59cde0137d9fdac27514811f3475783f29c5db296053667477dbefc9105006a0d1a350324b3a9e977a6d7dc833777449e19cf59c3aff4e5f63b25a16bcb7afa015929c3c6632f4f3201343dc5719cdc0ad9fa5be0c6df7c8cccde80f0aaad90e5bd3c61939630ef1ee8360dce1f654625cfd70f55a2178e2f125f37eebb8bd659f2acbb1b314e120b3a61850ee2e3ab8935cfee29a90882b41538b7a5591cef3c8cf57b2cc2ccb55ae67abcc5e7c803c471068c18fcb713122a66585ecfc628b91d9f1725f25cc1cfc477db141e8a9d04ad9ac89b919b0dea172ddaa9edc9964b8adee506c73088835e256b7689baa699a73c26b2fd7bec78ce269007e113f134fece0c361d48fa1d8704f4f830687e82c1fe212d6f49c8a4e54a0f9ca317c596390e04703283ff5104a7a00c14562d559429d5b909e6b8232fd1f32ae9ca1f58a5842b68e052f64a8cbb03c67914314a9dcc349ea166b8e4561779bd573481a2020a4a2149fe0b50406cd811bc1024c75f24c6f12ba9eea836b21186647994aa03e5bbf099eb53f079a18c2f07b2cac149cb88aa1e526724d9ce8e4088e91ff09270722f7dcb9b14598ab8255377e16d4d5959f4bbad1cbfb87d0a35890bb7c897c5cf480ee48ce5b1bd53ef08c46bcf0c52afdd4840c98674d72bef67300bbcdc9e8163911dfed483acc00b891faf7fd8fa190eead3a34e5c98e3f2480ca3450b39814a3c8fe4f7beb2a4990b6346e1967bb659141f592ccb7f6f8779e68b291f1356822535bc928ae1eaae09d48c4b00b1949aabff5d1191406430c140fa38e0aa58ce0a34200411e9ce14a73b37ecfd33ed54f6b9ca4421bdbd78fba5d436f6d631b237974f95a1b75cfc27fe83e643fe208907a34de5002ed89c81251585bdc494ba2427dde85bdbcf5ddd7e851a1a203fba1e47d8fb523d19641af74f64aca5a0ded757b40a888a83570508f35dac6a4143b9131d9b961b4a766530c05ce2a2ba4d201be1994ac91076bf9fe7b7ed2fdb5d4068bef1274af0ee7a4bb25ca4c30628a39acc57831e1aa54bc30276afc57d96e8855ddcdc9a4b0b1d565b6ba823c28614fc5e98a9dad7a4395d0dc701707edc37bcc7d19da24123edd96d144fcdf2c0aa4ebb6668ed51b583ead6f3a54e0b260aed7519e8d94395e88907dce2af267254fcb80b4528be543f47d43650ee96245b9d98f8ebd3b086d88fe1ce0e0de284cb6b6fddf370545a984678e1041f4a77ece49b6658c56700fff4979f6f2ee1511335797d5fe9a78324c564ddb127f0243f69be8488be8dc691a8b324b0cbc193571f729a5bffb6799344ed24e11b9d83ecb11b248aef8985d7e85936cead9c64298d4a2cf8c2ecf8f34d75a3324f589eddcb992347adbd4d33c811b4385d81937da521e42b93016aad4012285d369057bc71cd202f47392214a1c5defd8b6be0d7fe95e642ba9ce6983308fbfedbe5fc46ceb37015591e32a12b1650de404980c1d75f5b67d5ddb2895fc4d2e144819e7607104f2d59a14a25409c8a8c267ae1d031b57c601555642573803304311c09a84c76ccd0cded7b9cb54912d14c7a2546e8d8c099eb3a66177b6a855b2f434f9e7a68bc0ded325692e36f77edbdc6c2a6d881cbc8f6b1589872921e5c7d3c8b26785c067f5b2093f2fb05292bc58726a82da5a32dd3f13661c6a979551872d7f3ab1d0c31a0d389f4230a2eb132f42369b680afbc297c53a46f78fe86f44ba99428f70328313d9815526d0638ac90b2b17028857e78f9c14684d57200f8a1c676ce2569473b111a49221e7649216c16b5432bf6bf521df8e1e6e4f72b57e598a51d5aee5d667839c7ef59c6b241379ca4bde6ac21e0fe64e8b6f46443512d9eef4ac90393d8a137faafa435b4ca9561a3954fb42733a2ca8beb7aa9fbecd27813eadcf898abf118ec6c844a7cd2897bc170499bb309f5ab50019de7941bb0e75bb6051e7a20fd279c4e34ac9c534746a771d6e55d597f296042314fd8bb72c3d683752a841579236c8e477626a18d80be34c939e4ea4a03fde2298b82e2347c0874b71a713a42e7f2c1995619bc29a1ecceee61831bcc17802548e96e3832c7882b963f0f6fcfc6e5b528225ab7a99e61bcf315ab26e086091b21d4a1f35f93c0aed92177d1ad3f9658aeafe94ebe4adfc10dad3919f0f4a0078daf9bdb7bf96a3e25c15c232bf3ae6c4e89605e71d40734d1245eb17969d6e9561a8a4bb4225a7dbe3b1eb58040685481297f88bae236d6fdc6cc92a784fcd2c6b8e838ac7fed7d705ed2a6b8be9c6feeb692c75f7c47a29487fe141b939d396af9c36a0013f4e486a27eab10cb5b09bac7cc5ca98e22374abb14016321c3eee41f88592258a1265014825ed56e7fe5d3a066e3eaaded78432b0c8d21088164be887526a9f7705962b2091c2038f3bfc023f18b6a4b5c377b1ec0be5c91ca748bc93cbba2e427be4bc3d8e80f90efcdb9ac48c462e6d0ec73ba14f0465607a02b6f0f1ba41b4b2bc61516986a7ca25e34f2fb6c05502b81fdd61df9dad6777a6d7c71e14417a6408086b8580d02f96ddc6e8c7059b855ac02f27fe5813bf61fe32fe2d044d5906c8b1a4af229cbec36c5a68e4a26bc2bf973cb8d0efc34d29354615dde4871bd79ff9649dbe3d30d383a90b10ac84ed084f6be0438f32d4c5daa5e975c218e65fd05eaab377925b25424819574b82758392421ab9f416fd94f2f6574ff694046efc10337058257578574641f56b896e939b1795b758f7a19164866bc2402541cf46ad2f7f55ab30564af3b87f919fb782170a092e5e754610c4a981cb793af6f652d1e5f4298bad3bd98a5616672afa250c8d6307d56fe37d65c663daeb41bd6a04cb82a7fe4459148c55721b96176cca78b8ae93ccb032cbde6048a9fa1534840ead223edd2b70825b3f57c292309de8fcee6cfe045e49f194f1b3f1e896eb455f31633cded4395ad2f79459afc3b9de91cb559a04b2efad05ee28efc940cb9f24152bdbf000d1a38d50d18dbf3bfa86b6c49c1113b84dd4347c5a2b6d7d71d375d5112fafa5f4d020f9fb2e3548ced4991a799858ef611cbcb2372efeffd7451593505f016d4d9888b48cef3d170b14a93bfa793fa915e55f19bf4eeab411d896c0656e3087151348571e8e5627888134544893443d170920684369dab480c618d02d92ca2a396f9b82786326a328b6f72ff069105b3c8694c63ef549e61ff0306825c807142a15740855e999a5fa7b99693cad14980530fd5d0bcd0c394198ed7bf6cf53c6cfc7f117e7d7192d7d281c73797908bf3a032e75c0325da7357080e32173ecc59c04017799d6bd702c14447e36ca24f6108dd1a0c915ee5ee9f516ece1f0a750064a4cb66fd8048cfa0fbe021de08b71abf5f77bf9df2c5acc8aee5e7bf940dff26c7526d07128e59b8435468ac59b980b888629f7947c4e93fc3717ddd7e9b558c74a74f8da85e08bcb09df46b5db7be88b6a756db428545cf84e4a7d51ef0b090108505e5269e8ca280b52fe9e5bef746291e95aeedac037119c9d1db23844e18aa80b7512dc1f5098ae9297468ce629ea51c8a4f71150be0566f3db3768b5170a445d24a18bddc14fc83137f160309421ddeaaa89f6787ec2e9e58e38b5a5920f8d2abfdcbdd6cca796bdcfb8947cf5eb089089fa2e7581f08d1d1077caffba8ccc586ad80a0fd7b181ace23500c8c356c5e0491834e1a4e7863543d21f61011e10954134007b04f82ffb6417819a0c16bbce70f80cd9895d94b9d6bbfd955ad4890be4c93933b43d4c74f8d6a164f227efc4a086028c06d7b0badc53f7365f85317e39f83f654558569a857d8f9fb890083f5131daa9b1ff7931734d8687b75332766692ef0aef7dafbbf9446afd99ec78e6cdc18734e5513c25002b9ab9ec099954acf7eecc59445fe5ebc3bc6142a39c1c8ea20d591a5e718f353f15ef2d430a51b182df61e1f174fb06f534ab6f4f7c66a3c840976c95db37e693d523165e2dd470da254a6a8524d58fbae7927a7e6a4031233ce8a9b8c0befd784695ccaa5ced2636a1a296f098564fb02082b4c163dc38369b8db1acfbc1dc5a30db64759947d41be3eb5abccfda5b3fc9082d4dfe8e77c155de4a0ee6040264d7d79f9c35f2846ccba1edbdacdbabb19c8bfcc5d11ec4c85c1ec68e709442bcc2ca61a190f7bb832d16086c848ec033dbd7fcd1145dd7e00cba80eb6cdccc496ac5131e8fe9d31f1354b6bee665c220389bb316765aa4878e26223c4736df5536de76e5dbc1b5474c1fd681926697df5962d226564f97732063edfcb362a0994d68f3459dc642de38fbb79bf9f5ed960c958f4948ae64699e7374c487eded697d9d66d8149131c7df696b45f152267a5fe108f6e097746b38e8ccc34bab5095a6c7162483ada6bef8cd9d6b8ca3837cbee57057303a97809b967f6e43a142b05bd6624e795e7ea60e186597151ae3bc284c25a31aa40bc0ea5dcd92c9446a4e44233df0da6c393da72ef4c4f6b7ad53522afe47df7289356169e949632b85d1d501ebe17ec2c122e4c276ef5db55121e27c5c8885ab80e085d3b1a365a8903a1e297a9f3ec38d4d0ba21ab19517da2d3a950948d10755882fd953dfee1259980360830c96a39d0ca87c20a5fbe5fab937adac66b67475114b5c903cd6c5c60b378bed05ca8165e8c28c428f2d15c5d1e06bf82219de04c9ed163c226f4c36c6b1072a4d86a627074578fd662eedd74484f44de2bcce98a4ca66b75e4a1a340803aa3f5680cfcc669e4319b6779554c66d0d0bbc5f0f2fdc15f7c525ce975deca63b72278a6b6c969cb8610b826546c1f23e79a8722df035d29b6c348d2d9dce3c136e5ee8d383e28a31470263fcc1c5a60a4d328783d0b6440d362f0232393ee399aa53bf89c8fa14093f74db3e4023fe366ad49cf43d38d285083c2a0048a2d45941324437988aeaa65dff7f83bbd7fca2e09ebbc73a9cfc46aab6a786f888198d891429d3aed5d431fa336a6013ed2227812a69238b33c2a1bb48ad0e21695f4900db4a8a729df7327bc7004ed604022753f0c44df7dcf441d9e99dbe4099cfb3fc2c8701f6d2e54654c08066147227f2a30babdf54168dcccec6d1c41ee0b3f12f59f9716dea7566ff6eb55da27426188da3253fe71f488d5be7b09284fbe5c7594c63cc0a436fe6ebb8c1215c81b0e3dbeb39f910f030eb00d44177d7ecc4267015ccdb15e15f0cec3da921470fc4b2becf1a4e4a9fa74cbcd0d8f2ddf35bc6b578d1f064ee6806f5ecf00c0624bbe11b6b9ad87f0f7c6e6c18d896caceb02a5ea96cede7eeca4e87b777f3118d37ceb50254ae6646069c1d45efbb3fe9c110044215dbe4dc86f6e4a752a037366abfc595d05dad42620e70f5f84fafa0346c98ba008da775d0bd56165a1f02037ad0c7d9f5ae4465be1b9f7dafd64c787a5fbb68ea8f41d78b3f235111dec27987ca15ff44e1fefc89a619dee62ced2aa8d9b7f89a5e3fcc43b41b01902f190c700c7a0a821f4ce6dc0bfe67ee8e873ce20b4ec2f26a3a6cec3d91bcc3666f6039a1c76c38e4e5301e02304840b3dad1a6899f686e96f93def3e93d759941f916526c10aa5a2dc1b0dbd272830b0438e06be46df4f24035d71c3a691c4b40e79044c0382fecc9c693c84a17b81e71ecb6dc171dac7b60b713bbc77e8c586dcccf9b4d4c9808e01c1e9c6e4306bbcfa73ba36f61bc7d16cb220f56a98259fd1660473ffafb300dd48bb4e63a09be7b56d22f6d2509efd2caafa3d014e13e380fc683e2063b21dc0a0d08638b718c51aa51d8b61d08847e1a1d41de6bf59206468c65e70988976231c8eba36d4f826d8e20d48a93bd096fd5f619d0084f4c5bcfb4e9f7f9d4673f70a96aba6e510efa53e2d3018d4c3398d4d9dab4cd48255712d1c27710ea7dd94142129324c617c2e6c39173557c3fb3a6c47e9879ad3b59bae5ab5d18af148b600900eee487b644c78858b4e097493881f4ff26c92ee19328d36f3c20ad8853458078958e0c3e9539189cde4ae4326994ca05588d72621f62b095f37ef6ba23a69efa94eae6c2acb190fc58d4d7e94b0e77be3d110c2d565d68d79c6163a5ff1fc00f23997f87a4a7bf006bac9889ff6d05980532de9084fdbcefe6bf662af647ac230599fb8719b011e773c9c6e24fc6b0523dd2d3631320bdf22a2529f049f339f77b2e040d1a83a0bcb521670707d92a5d2076cc342b86d41abe421695e1b46637872a11940ee943e326e4b7f47d9b0989fa7464289524a7213632a23e49aecd1a32bf24f94a9924abd0999f30d4188cac7a155de66b97804c99fb2026377798a7d5492defd79ed399fc37696eb2aae6c6b8d83fcadef0924228971ad0330d2d767fbe91714fac65b40866fb9e0f62a03f1e9096ec30dd3b21be14bac20e82bf5b7bd4dbb5772a5a04eda5032680da91f4340e6e5636afc58f29c77b767eb0b628af52c2ee832d6305fe9b3289c3840a8159711f7d83d0bb3bcbdfc93f6f0d8dc31b0131d4881e5af89e799dc7111699b479652b95136d04404564e76ddef532afef1e29eccef3a99c638c968c9970fa4ff4561be5f2c7a9fa74fdeb64ef918024d4927c6fca30269ba93f9d5def02e45036e068e10a0e9efa9ad3a728f0edc29dca5cf442adb676d270a9dd1766c62ef936fb901b1e3cd8505f29a50c366fb87890e1c1569cbd57884e08e528701400ccc702ae9b74cf45f6d13fafd3ad8f085bb2c5cb4dfd2ebcfcef03b545b71f6490dc0cb789edb0f5d74d13c264e39465c384fe1bd94f313dc55300b0dabea988f1269cd073ae8de9707f33975a8e8bbbe6ae834d8f044f3e99839ef899e2535abfd8af505b133252d15f886a305e3f2c1e520cd305fdc694cef0c78345aa4c163a37d92711dc63eca50b7ac4f129fc2c9305420832c9697fa12a0c1883c3e3b3adf01f15ae293615740e1cf97d7629c0f2475ca5beb39e5d368bd8b19cbd65e2f87ea0d94b38877fd685f9b3cc821d825cd38d48f2191d98e669f89dfc2899b385ee31d9df9919aacc18175fb785fbdc4d5614b91aa3382e6bf8e07ecd96a63c90748850468728b537c191c2017fd81a0bc1fccb01ed67c48f5b31711dfa563cf9dea27ae88db90f28cca7a948ff5d091f3822ca12a63218e945ad53b5d422747fd300f7e9542ab8e58da90c357a1a9b5bd04bfc80b291ae27c77fd490cd7c191d797d035d9e2c4d825242d42c7ee48a3a72240c7685bf2e36fa90054fdd2c07e34b88ad7faa11873f7fecb4173320f1a5821308d40362ffe4692010f32d8d9b8591b5eadf63d71d9b6fac3085a560f6816a1d425d42280f3b285c0c2e6d63aa1e7e2f380e284834ad86ccc4ba2d3cf4b1e7f2671ca8e28a6d81016772753fb890481cfa78b4f763b32de8a6469861c4a0c2885ac3012770f9868317d799af179fc77244cb0c974b719ad5751fdc69c99ecc08e31d0ec61f22203f69ba465c81c87f5cef648f7db3ac442b4fced71112ca5e631558ad3c4b0728a63ee2458506b9d1d2122fb8773137b232ca79a66277cf2c748caa9fff515eca3ba4c53d716b02a18914b510681dfa0b4a9b247a0b8c28365b8f4bc5b3e1eac253e947fa39e1f87997927ca3f247e661da64c89a920bc3ed4d5997292e1ea41231df8e351175f9c4ed4268cf33a01cd49748e4cac52a921efcee6b5d522d6a5c4c40934602a4a0573110dfb166047645db12db4428ce8d736f87fd9f73f1efb43e14e2c3973bb69967ae2e012d9c80d43438c2c0314e0578545c094bcd07e52845e0904f25d676ee850a9bd9ade13005844fce2c4c51b96f4cd2be1769615727f7722af29630b6a8e405504c605c728658b8a148606d408ce884b535c574c9c0bc7d9560d2d5799a1528a75502b2fcdffb9bfecf29a17850af6f78cafc6f6a532980dfe812da15c306ddb4facde28a95821f3c232b246ce3021aa92ecf69c95febf3e7fd1e258ca40aa0a91b048f3d4a9c68fc73eb2963f86d29f8825fddc65295b288b649670f1712532ae8861156d8083b2bfb350a08271537b5b56b4e89609883d7b339ee9695eef4c3a3a132d664804c6be1feef1d664cdc83134f92db8a30cf76f03cf9a9266bcf46732431b4d6059dc732480c51bbe9eb55aa2cc22709cfdd088218425165af04421d0a29bd3fca4508c5b156382d6614bad40cb22e4cb61a4e4ab45678b84b8acee8259ffef219f834918e13014f740b5a9a3a5c9b4be160214d5491e4a49b018729bd9748ed3326c31387195cfc75e98172c3b4d7400daefc803b0a806a31cf5b428ca9f4454351aa8f8c37469c9330e44c67f42f73c0ca3dc169a9f464aeed70ced85d0dbe431a0b0c303aef5a1497e6da072c2bf9d3d2b3763590339bd59d4d682016116a30f2b305b6a5c44b7be0e2a40a840c0d361c38fdc4ba370ac7964c7d2dea9ced4cd96ee4c4cd0517f1ccd3484cc71c42a902855a33a1f97d648a999ca7ab94eef4eb2839ee87a80a7aa435b1143d6f8e2c913937d9acad7aea8d6903a6a82688700f76ccde70a5a93ad925c01b529f38dcf64e66c3bf19a328ec55de93210b7eee6c186e6666237feaf8a2c59304201614156b0e538d3e308d7bfc24b9ba7ca88c326db78763a7507a34940754e4dd879a99b83bb3aac23432007d6318c12906de21e6a012139250aa1c7045a9fd6bca02882d339444f49a9cc3cd701251f442d9322ce62e9137fe0b1a5963668f1b3b67432f42b25fd134d34eec14330a880e891152e2935c448bed18f3b0ee28d78348c924848f367f4ca453cab39100453c5d3acdab2b1ee11a52c907aef982400754ccd6442333b87a1c95d45342a3e77c6bce0863384cd33e94c827dc7c0204f3916085722ec8acf313444490df6f49cde9841b8412d043bc144d47ef151dc36d29157d5d2eba14336d133be42edbe03aa83b74f8ade72557547c70a4c7458e8515b4bc59ecd9c7396d61c00e0eb274a6b748caf93347aac6b0cf72e0da21c56b3444bbddebddda028bdae848c6db1daff0be15286586434657700936c749c49fdbe7ce786046e8226b01ff58952adb0752b87ebdacb9378f21aba609cbdc3bcb73477a34652f36691052314658a0e5e51767c9151585c4ed12f6a1c06520e9f21f2a509fc55ee64cb971e68714482cdd60bf3371aea08ed1cc3cb4e8d691f9e9010a801f6da95cff5bf7d4a4f9956c6826450fe02e48e58ee5ab0bfc1eb192ef48a1890e543e1b17ebd24d012932836c3efa3be9febb35f231e909083bd5db7852199a8679723bbfe9b54cc27a938742854335b3fb6fd66e744ac5c73049a04461145ca374879dc6589d4c422187638713f404f1dc380aed52cd0c3ae34d35f35f8108d1fa3fc00e2b8caa47feedef93e56b243dafdee3f08347aa5a984ded9f3a2f148dcaba5c3f14d056713d190b740e5bd799653747d6e44bc5a8039cc90dffe6e874b5fff77c6d1c2d6057a0810742aa3ec1ea3cd1fff2b214a83841704616bd6d34601163f3151fc1de01b7cba547d443e6f23371734f048e48cc9c9a9f41cc21fb1388efa740ea16e2170f65f71dfbd8701216350b5566d25d2fc529c2e117dcffed358519801f5d1fbb20e540c4cf383d8579e89d0bccd0f2700919e1c8e95f1081d83ba9403abade3c2eae1dbcf44e995f11a930db17dd33d5ae9c9e24ba5be287cdac06fd98eb12a9af3722b976c7b2010e4c98e8a90197836e9ee59e88d9a5b059377338f9b4c29cb7b75af91c6971e88480f0aa4bde61060c5b76b7e3bc4581a5bafd711149ffc32e9acc01a74cda724d03948f9e5fbd802d4b0410110366d33461af605a32a856e2256caa5bf28a8abaecd5959eea3d990b15df590c5540f6ce8169f1172db4e523e7c5402a108989d79ccc8745a25e3661ec5cbb715c2d83403f71802782e09e05069aa740ff1b09f2255f757097945fd76e3ba212939d1f4be1e4261a2c490b9281fa93fa1707b26ae9c1eeb751d5476dda79521afa2cacc98d2838ec9bd46a7c51549d0802089148d08cf44552b2f5f807b103b716c37ecf02367877705a9afaffc89b4e152bfbe4fab86cdc38ddf7b95bf60a959e9d0e130634f2a30e1ac87f92a9798e48aa2c83627d87df1c0518228d309c5d2a91f60fc8cacd62b70894636f109cc9486dfe99f89192384671bad01c5fc30cff616c3f145d09b8e89c32447c886dfcf81903e55f39c5a06ff6e95e60551649dbcff6aae0d18562ce3658b119675798282d7b3625809138c6a0031b0ba15d36ea81245dd00fdfcb4ed1e9fd1a2548c614d33199caeff7a05834dcc5282b4f9f31ee15ba03e5191063d070459961805d722526d10f4c4e0bab539715ac8b9c402354e021c04f142f3005dfda5d6458d9099f856402c1ea1720e69cba94939da1c9dfae794390d8809e203855fcf22af14533032e13266c294f15c59eeeb55ea95997d15fd0464da8d238dc0fadf04aa26a0605fcf529e3e6e1579a9333757ca7ead69dfc2ca25c4cada3c7ec2645378214d3c6cbc67adca35ffaa9389bbafa7090cd3d0c89beb8de1361a821a0ff0930e238e00733881e20d9de376f271c1dc4a51dc43a5a9d27237bd29d9b73bbf80d8507a612c69127d10ed176478435434b1e3534645e0bd676e49fbb65f7348b0c776d8c6b298f13b93423bd105bb4d93469bbe2d89a5df2cd42f6c9b987a2d5106928b4b78543fcbcb3779135faeeff88651aaba7fc9e96e9d6b62ffc5f5cf3cbcd7e397de84125be6fac85881a6254b0327f68005456fee8204ecace71b96cfe9ca2cf000333b3d6aef1e74cc076e357bc1c533db3de784ac409acd90e4b8e3e4122aae6ae09a56b31128795ebf504a66f486befb947093f4c96474b3be6c482f708efc2d2afa0cefd57717030df516209a29258a472458ca03b35ebdfc6ee8a814c3943d0f6d918457090f3cb15dffa50c089ba961ce19ce3efb1425e878c1a28e246d4c7f2baa60d961376c683f3f4c3c641a92f2c0195371b51d988b62dc43ae7b5b1fc6891d6d2becc8dfba5c0081b991727ca41392c86a8d6e3fbe0925074da2f5fa7dd8656375907975234000e2a0ed49905bf7ea3c07f1c5d338a124beb6e3fcd9234d337d4a9d9ec1da9545fd256c83000781f84c4d5b9c4bee927b6851612e6fc733c081c7206250f58975b92530f5b8c61a63df86372b551f617c32a0a14efacd23e18d1da8206f40aa4d07243ec32e5c0e8b85f053c49ce3c6ee22533a7e247fca14edaa928f7399021c2a53546ab44fbe21997d979a24dd03d8a6a43c49706b60fb3a08f31c0891f1a527aad8c6fe23966a1c40f1a7eb8cf1ee5c4350a93e40fe20f35d6fc856bb02aa56327e92db8b517228a938eee17ccb5c50c89529deaac1b7ca39588529a21149d0760b749b060a7ca2791b1d90efde8fcb69270309e6aa6cd30163ac2eedefd7a2c758b4fdedc884a807ffdfc583e6b01b450e4bc2f9f5ad04825a9b114d8aa031cc8185c5fd3136b1e43afdb790aad46ae4d03f90a2adbed1304ccf86d522a0097c28311830e5546b56ba0465474d620ede4e10a3d97825ae2e8a14b7f58a25b7787635eac26244118174948fce9effba8e950625254fdab9a98e437a463b6c0ad1a32a112f4309a5bceec9fffb346824b440fc3054e4755b88b39ad0137e2a93b9ea005197de09fff60e8b1736d2b04b29565d686e8bd79c77d674867d704daaf29c5f193c900cf8c8ce065b94b608d0f3634efd98a9700844f7728a881bc81078fb12e42a74159831d3532c9f6601b7790177768c8c188899db2d89629a7afd1b3a20937ef31ec9d7415daa3dd44638b48abb4768b28c4a9a6777cf640892d841bdc311ef63384209337e557b35455c7f2fb0ef191eb01a58451f61e19b738304f717655d3611e0bb946404df609dccce3536f651ce870e352241b0a8b67ed89ac24617d8d687e63175b4f067276d61c34df666df21187dea47ad3dfbeafd77f7a01ee8e01df737096d23b64a3c948d586bd8fa73e675913971ec2973aa8079a65d64b12487caed81a8290cf608347c69aa9ca247b882ac9b96a759e36436b09556f037d377323fb6ca29bbbbf1a2b40f5c83224a8659250377bfd2520dac743cdb86b19962bc06ac03df3cfb9cbcfc098bcda2bc7eba437f38b4ebefc7d6f6457983303460856342c04aaf23abdea097329227a9f3558c105081b7fa17f742406c44f8b37c3c18e13c32058b62670a600b6e677fe668975bf7f6d46eff8e50c4fbcf21c6ed662c052e6dc16defa167e1456d384b37eb3153e754e60ea980997644f340ed3f65154922305f672edf540264c979cb476ec9a560a7cad7fd5f208aeb1f14c4d57aef3516ba6661f42ffda75143d32a89acecba4bcf3fab999a71a34960ba4e8a6d03006ad3c741b1c79802cdd4a05fe2f7412f65c2171dc95f15cc0c86d0c858837a95400843de4200006342645f5a7c6f947e78715061b7b655b3ed88c08e71de7f3562f7f986f404053087a2c56754c57d24a0b89b6775f883de09bae60c1b5960088971a6390de888631a330722ae3b95645c798a1369c65449ded8abfc13f67029dda7d254c3f0ff63d44afc17f6df8b00eec3fe903dd98b67ab9932d1699798b3b03d0fb9f88b9b839ed715f860cda3e354a97d7faaca30d5535762a7899debfea1ac2e2ec291f5251ceabe8476d207ec7f4ef0cfba8cef8c5307589a802160fb18c0db4976dec429bb39571f9f82e9f7ab38be2fb4f48ce7ca26f7246133167a10b030dba782d3282a648ddb53d2ba6a36a097f120ed982fe5545f266199df7069946ec04d2094ac7513595f7bcbd6600ecf989dcbcbca4ef348bfecc91d255dc488367d9c9bdfb28e8b5f77c0548ab179f72143249904cf831a4f117b1bfc181fb95362cea9c6fad0e7b9c80acb5e042865d7f1ef8d23084a4c93fc4d8c0fc1c9abb1404ccd807ede6f98559cadc5d230f568120efce09eaffbd0f9b1eef7f14a6944961b876736f751930aa877dffe3f94e04b977c980b3e839da3dd9285f609959a297b5fc025dc397b522d768ebf7a75142399870fe72b95b685a5a428c56b7ae24ea0ff3ca6494008b99777c19fc30fcec5ac423241628c2fb851cf21ab9951879fc18b62817ed240e903e6d464b67a30c3308566c405846b6609872bf852697814ccefe66e44976a185456fe20ffbab47d790833817d893f249cbf15ef65a182c9c5d72d8ca57b2e8739e2ea5efe8a6653a6a5f8709e3a30b883b39888ca7e31a0401c24fd88e7bb27f89dbc230265733488855f15c92357d3e3dcfdbbac063cdf59d617ec3051134aa5da913fcf3d569ec787ed0d3a9bf6077e123230c09483d0f9f5ff111ccb3b1b5d0d89ca60998ec86f24dad77140cc92b77e4cb9720d5328b6bf8583956cb92dbbd079c3187ca338f6bc4f48880ad6709bf9f2c7b62acf8dd1ef875249fbbdc943da302c3ce529d017f4db493c0cdc8713f6a061b068b048abf8b1337cd967857ccd8783cea58e307740a2ad3f2b1a4054f478e41ca8da1ae762ff68d58e5461e8349dad91dbdcb323591d52b31ca8b9e653519f52c1f3e83cb787271b7178170741c4ae6e31d6ed10959b2d2521fe6e18b02eed888d689597cebe7e40806ffdfbee80a0b31820a0599dc47e2eee663f6ced52a3945168aa368e6eda1a16be0cde34dc9c52fc4bfa2f71f019867f12f7541f43b3ee60c9427c4d05e371f52235f3e31d20c90b074b231750bb5f32dec39ff454950b3980baff2cf4072321a05519a4995468ee67739b2e83cc9f97e4f71f7def1653e207f05e0eb514c9fa2992aa209355e1b1c5e6517be615d9a5d5cd96b875c8eb7c9459da450ca25c98fa8c4e9cfa608493f0ec9be9a5fe87b38736e7b621c150586b15da1e5b4900e74591d06840283f40e90d4c3f87e263b00ba59ca4e0d853480ffe6db627a766451584a7a3c37f7e056948ef42341c708e7b646e8f78673b0a5ee2de15b3d464b6d4af6636894b59520a1bc699c708f2856436a568a7bd5f1684455785fa6cb83c956f05c1310029fcba00180cc0dfe9686a0e9870f3930ebcefc74388288a87084ece6c8ccb9e149725a07226a2e985c9a601ef84bbcb24fdbb3da770c85304f63157ea6a8e2fb8cdd885ad1d61d8e60981f524b7e82c95e0cfbf2703e969d10a0a4e5909973d46b4d2fc8345968b70a0565a910624ca65792f4743a5d09186297f11dc4d3502043a806e97cfc665b963180e2ced0e65560801fba8e0317da7bb33c5a5a76f3b3b06a4bf99bef96903f1dd338ee00c66c597ee177d85b15d93887cd6e1bc904a6afa6f31b91438b214526147ac9b7cb84c57854cb927f46a454f76b1d4e13f83be38b308d782668a84b39533e4f7abd593661a829cf7cbc7b51e5e2bf9197527f45068cf70dfcbbd7a05da2f79d4aa5c7d0219f3ff85d26e98083ce2d882b1d947a211117e45df2d68574f47aabd64ce6868086cb19a00f3ecb61caa3ef969f13475ad58047de1e8d68c097b7f8a95ab1518f8485075695822f4edf1be5e0d4226b71f97d3650ca88392f9eda421b514b2ca2228d84f59e702c702fb4c0c770ef8bba0b978500973eddac67be74d1c8249d0f02e80a73ab22bc8517e2892f82a4584c9d24231b1120c20cff0e520ea7f29d4982b95cd2b6ed2912e621403f851b530b71a2563eda1afdcbc845ff73187533d7cecc5ca8a91c29fc9f84beb31863d60275883243b79c7c11f9beb2567a84aa4939bfaad8753110b6ede6fcb7653cc7c531f860ee417797f5773a32ff4b2a30259e83254ff44a7984c7aa56fb8a184b4579986073be061690dca322fbcfc86b1e787c0eccba2c61a35ebe9f6a5edc178ff2c7a447f577c3325f59c2921c79e944fdcd6e5bf8752c55319995eea4d22b9df5b675f72185fd18fe109cd809f3c1098f9f916db7c282768e6f293922bb97087590a0d8252b5df1a370078dda2cbaecbbb0d890aa37c7dd48274905dd51db64ce7562ceabb998ea93ffa42839a651adb7f053d0f8e58435d861b97defb0355aac66bbc3a0891a412bfbcd876253598dd15d6ba38e9227d8fe296aa27b311e6e37a65fc7f80cc074a85a1843eca8956a4c5393f4e2e18a20028ff82814195bde4c03f0e13daecd046ab92bc8f6d1ff8dd87a36206b98a458d400d18076803fadfb0197f431f10926ac739ceadf98e26a18cff02807aa612cdfa09e201b97f27c13e1d832c1cd79d454c27b3606615e2cfd9b4d249495f4484b2a424db8a7c7d65c4334483e5ba3a2db9994014c1aca98a18830c348a522a546e1baf42929b9d25a0b998c87660eb13c4bc2a1196d46fd06039ceebcbe9ef56abe9cdc5e98cbfd3bd8709d4fcbb42a02b313379d11d5f93ecffc0716dea90716f94036100a8f4be31b0e8ffc4f48b29ed35e3874fbf89bab69255867ff321044a8b2c9171c0c040dfe66af1a999eef868a278b4e80eef6125033395a8d73a0f548cc5f726651c0fdc31ea5b78e0b2ab2a4a15b181f3e6fa5c95e3c2146f6da268eb44004edd966bbb3f52ee4709ce95a68e8fa431322bcc1716925f94c890a9ff5871b2eecdf424850d36d502a71abd5d3d481d65bd8346668b211f54f5b2e9b3ff02a1d9605077d96b45a2eb8a87edcd84b4f358c6d60135f7d851dcc367151900f843a2e102bc09c961ee8af13e5f5dea86039125db09da85a117388bf38eefe9f7fc1ffb4d3ab775759ff2993e74d60e6fb840e6ae060eca60233423be993986a0e67184f00e847bd7d9b2e3346e62983a5c79aa80d5fd9dfea38e859a31e4f8974d4a41cdb2d6b19e0c5ccc5d0a2974eb34c9bead743d6e3583cce4c7e184312dfb75460a0ce024eb2bce053a87d984d11f0a5c3a4f04bbf8f4081c791dfcbb5ab490fc3a50f982895b4825480c4e61697ab9e34d94b38c7ed9d3b996b90e2cc9e9e3d7d10e7b1a5f8b5220c4a956abfa098bf9c03bbf688a227b22503716f6b5fdb791d86d3438948b2a0dc1351eda5d82c80f7cc1fa0cbfa18d1e6979de741d6dfc6764b63e5eb67f665ba6a932d49c3e886c2e2a2e0af62483b9ec2360c5b8f74fa104c3b19b19e3fdffc2f19e7625f49764b89f1dcebad64b5b203d2fda216f9baecc2d83f363fddf8e50f471a2ba07fe497aff0492d908eda73f6adc5044dbd102eaa2ee485c2bc0ea89ad24e00fe1195340b2d85ae60b8013ade5b422798593a2b1d0e7c274612eefe5a76235b6e2b8cb5ecd9d1abe824d7fda9ca0d773b8d9708939211ffb15dfbda7b6204c083f79ad0bd40dd63d0751b61fc41342bea764361b0adab380cd37869d9cef00696fbf0f54bd3da8a017a10333e4b6636170e783007b7a3ac0f92d6033ec5254025ed0ca59cc18644738259f7d500bc4c0630a3b94f5c789a0fcfb93a6b02912a40699d92ed0dffa5bbb64528d025b59c6e8b645416b2d4cfab7178c2db22ad83783cc8d39e13772c396fe2b6af2ebc8a788c928322c9e6bd036e3848fd84ec56abebc030346d1cafbb12fb69f7123c9250a49dec68ba0ce292aacd41df8b45e5f8f1591fd105a9718b6a0f495d7271b471dcc113e2608dbf0c9fa12c6ce58e8d3c186d4bd50b81d200b63f876690d7d3ce28184948f23563546e21fb37aa7325f0d2fa52181202dd1fc16688d888e79f410018408ad218ca098fb7abe3c8f56fd1ecb27d911edf2de52eba3e98918b5c8ed809af2ee700aeca531e5cdb2c3950a7ea56aa149266614f31654da23d7efb2b5f67f2b58c04a8509db88f0ebf743cc14c0b7cf7bbb8574e12b1d2c01ef10ffe027b1e73ce1a9ff371a147ac629661506216f50f14f34469ab0724a161129a66e04c6681b3aa662d2a27962a1cdf490f1f2c5b107f1fe213da387a18f4540d1e4a3d03908f06cb27c2162dc4a8e6981ae664d2868e8503191248f8c820087c21abed9939cf0e02111e0081c3922edaa7a368b5a77d1aa19691e691e34e0677d1bd59f52a6b255e2b7f49f1bf4fa334becc841bacda5625365d46b2c3503e6e8151d0853b992a3197377a0d3fc9f438e98e1707c6b117e1c5f3fcfa065db578b5f0b395dde42c45d0495afb48f70e32bd73f74fd57b1325fe2a0c028c117f96a4aff420160fa3e715478943fc03a4dd8c69666d9b65983a4e161670206e33e4dd390bd0855aec966bf2911497844e9a456a67915387d02004ba87915eb1aa5c6bacb7c73f83ee3b5b2cf840388ada69285e6d69fad5ed7471f4cb6ff2588430f950b59d3a370592111839564275ec1c587b0f1a6abb93aabd3c36b69680d0f7554556fce8aeac4f460179435d0c3109ad8317b2ce18723f666dea84f444cc0b41769a370e368609162cae285fa7100e0dfb257b43066c0188494aeba9436cffd78b83e591ec55cd9bdacd40dd0881268d962f1fd666a85f55186f416bd8185fba2845896b33cc4d52a438569bce2030f8008ad4a81a3d21490ceb95319e19650beda656151532e7b2a995c3275b4f4f31dc191b09bae275208c49884360b938e28e81b343efda37c0153bf4c1f1c6c3c81b18404fbc82c893f9ec5befd6e4ebd00280156e1c1d612d9ffc7210c6b2816a13ed6da0a6749b06683b6cb6a65b8306b5c77ce6e3775f08630309d1c56b7878ddd7d808ff34a030b0f514249db1859a4faeb182c087c23f1f31f9f87b6863c77982ad8dedf2f354786b6b448f5777b28b5d47868194bbc3ce8a27c8034c22b36e49635ab04a6ddb7a6a6ed2fda95028905aa07e15711099c19fe32f79a52d431f500e8b3d8571eccc15421bd2bf48da3bb1ee14d8594e132725ed87d61526c89de22982fe2420d338aebff95d57677fda88eccc56a29f60abdfe6b565e42b342bc32377a84964e43ad34ab3de8ca11eac565eab95f4a172a4363019349c2d752fd7491f4abc792f59dd994d4ea5a43cfe53d9d5c0924a4e1f053debd320bb5fd470308bf0843556a253fc6447cea68a8badb92e48705b732b2791a288e18c46a3c5c39ab38fd3ca54bbdb7977f3320947ad9cfee1635ccf433081e8f7b8e8a81c922af2aba3d5cf3b096a990243c5389df376be71fe801928ab0a1421f5b7fa2988fc3090387e091f7451a660e5928b5fe61bc641343706b926c4130494a1b8ddd8a6d5b0036e92ca58c95e7f957d04144f69310cd250ca4f390503673d7a3dda58c0cac380b32839914c00761cbf119dc543b90d3eac69abc1f47804bd2b3abb5b0f43b143a50134d5b8b49771d55cd22399b4a17a8d50b0b4073489b9709aca5002d03e4d717b0fa6166828d27aaf9c053d52b63a8924c732ad276334a38cc88c2aa461360b6662d3e3e30b34e7003013bec1d4c87f0d95073198427fc7123095738629a2efd8e729ef710492b11cbddd87bebe1a06e23a53965889283d74f963a21fc846c912e3bc7dc40431ff3a44bd8eb46335dcb5b60a60d985f377cf18e6f5f66495e9ff85ede1138a9426d17ddc55e99b2d80fe60cdad67a1fea3782324d1578dc5e7c0be4cd7c8189ed806ddc1271c609307d06443dcf62ec9a596b1567eff173f33392cdcf95db7e9bc9919a9fa2e730698fc1fa63fc76bd4a6d6cd337484b95bdbb54854d2f30745cbb0f7deb3fee6530cab89bbdf75a78ef5d037568a3d356425386f5f181852fa5409679dab8ac545d770719a4bc1589eaf748afd04594b2f72653b680380fd2c32675aedd44467bdc1603a5c2325e68024e7c805213275749a70e0b8f69ebf9d89e913ed917064fef9a8d220f6f3e64d3f6c5cee6234559f118d8de6b6f902dead179f6c1238ada4a99a51fccf3ae89be5e127ba965616dc7fc71e03518d28dea2130b0472dd234e2c1d3c614e6c08b6efd085d9736a9ab69babf31f442d211bf02e0275b1af2d8f2e844d33bd47cf053f7090221f6d035260e4247c628c83dd5d0990151da29cb6747339b7d629402a3582ba981624bd651048c2217ee05ffec7664235aa94dccf4cb81b652950ce487ec4a06c53e698eff4448af574b94be4f1e05f27b240ba88de4243426114b13905ecb2c53933bffa95759099e3027454450e7dd0c6c578eaa0f36247ba94050d5745e2f4e0d1a3a7c5cfb3aa998405e55b062442b084ff7f8910c69920601c4db15e824a787197d3a727ff649fa71dedfb981397b0490c0665cdb9f3554159710df438d0f6f5d4573ecc7b1230d47a8d592badf30a6a1012733f2b49c38e540575f91499222ff746955f213da2716e4b8c516b8c85b1a84829e7f3a01780ac86214e9d9078682a295bc1c64a6feead443fd7f1e860da30450c2b6846ce9b5d7f2c112459b74fb2efde075970e6b76244724b23dd5a4c1240a4285e6aea739e4d7cc180d541f45239df5280acd063ccdf51069776fa8a5add278e6bbbcf902d081cedb189c935ea94a07a7d91045f0f87a69a8e85841edf738e502b36c9d93dfb9a6613e235cd2e41684f8bc994dc7acaa4dc0df58b8461afef03f5ca5e5e787efe112350d9ae3b92fda9d243e7402e1792b74f3d56df8972aee051d3de3de2c06dc60d431eb6b6f0429fe4563b62a5c5fe1f578e1286cba4c375013f962d69a08f289aa41184809dc3fe9bec386be259776babd2157dd3b892898e01c595883707494b4ddb25a2b47cb852cabbcbab65f303c6b923da098473cd9ac90734bc7fca775abf7dfbd0ba83347b9fc5d5e8df47c13d28301e579e98a4ebe4750a96315f8f98264b9eba92a5a3ba24eafdb26ae31e4abaddd6e66f3d56ab82f379a0f6b06f3e92506b1bafd54e4197c4da4881dba1371cc03f0d8c961f14a39e2db4cb3ef367abeddfcb4b2717a8abfc93e3b9c380cf38998e71b982c1de3eca1764c3acb53814aed198f6c8de6936230dd463f489cb90993e8900988299b553511a6bb95a04876d67bb7b0492fab3d9021eb09bff31005905bdc75fb2900c164d1307ee624784204a32bcc3a79dc54d143772b81519baa1f37bacb3dfee10ebdfd6fd906b4aa673c535b53bd4494b934144440c423cc6fda82519751a6895b293ae46f904cf3bbb571d15ec53e116ab41b8c11802d2d14c21c9f363d9a0d61a3fbedd85493d1b9763eb616bd3ad59413c12d3741a1735ac4c0f059402f0218250a12ffecf670a15afbfe3f6efee97b1d8be09606ea1f2636acae0982d7c9b3f8b0bd94f35dd0b854360a423c4f0e38020e91a97fa2c073e79be74ff77d08d21b6a91fb69df6b69f7bac1b0d4d33996328581a869cb28e78a66cca38123a115408a12f9d5a85087229b29723fd1859b2dc2b4223454e47c71d57b31492d34a8416d7398fd0c2df79b71dd4b3c520b693da71ce10c7ec8f2362d921e07371572b7a259c716375f8695bc2ad0912e248ddabf3acf5760e8ee0d7369abff771a00481faa8af4a164667c0875dcdfb42b45aba96fc860ad5f663b9b4a6c1791a9172a8fe189f0c6b16097cad6f55fc676b63cc0bda6522b2c9b7d2160d642e18db705261b269b9bd6b3b6a5c3b0189d259db244d74884c0b446220f95a420236bbf7e351d1f467eb0f5417d6c2dab0e1ae001d26f32c13a19f748e7aeb9bb73ed3e3a1b9cffffa39880bbdd6c879629f8dc3005e7398f1384e21c41f7af868db8eebe1c1c3666e0178b4cba40753aaa613278b4c5059d9e7a415806b472e0595f85c94f15a9c84bb5c934f8c904667d05b1df32d3405e71a8c95fbfd39363e130895b18e3c8eff8f16eb0783bf004162487ad78054777bc0195ee98554efa3d81d868e379cb98bf94a7a326799e2ef3446a1b0e718314d9c95b7a9c4d3719ae671981f3a4c38ba7cf8ec98a8f6e965ee4bd7933aea0805ed16974cec4d9fe0f0df405b8d86d81c10014eb48e95ecae0e797ee63f96d9d008b17a03d55c021ccb8e795f3a26380da810c4d6b44c0bd1cb004be39a25abb386e29f4ab22394fa26ac88747da6413720c7ed594d074ca5c411ea4fc57fe45b8375c2aa507bf1f925d974103960f870a6b19859a950c9dcf93ed623b41c8261bbf877ae62ce949508578f06a7613a6c8e2542016fd44680ef9b4ee06589b080acd98c00ab57a1343a3f4ef62d912a5a60e08587d1709eb2b61d675bdb0ca12a9acf2a8d2e7f50cb6e2779ddf75e174c92558c5f317c106b6411d5fe54969f08ecb162152a89896387593289aac539b508851dba87b82f968cfe8590b1f31216cb87f4276c72adf4f6b7a1100c2222f4d789bcdced9a4144b35c9a3d3180892f28e47cc2645f9198aef60a2924b1d23e83cc4aa206229657740dd531ff2491df48103662b1fef9d8be7d76870b860cd3e6d44af9de59d46b49b30df7440cd7666cf34de257e54dfae2f64347945a780e548a3e4f89d1ddb704b6e7652b8c9b5641a5b2a0ab09322100785d11ebc1dd705ed198e477ef7b9ce619c6b06c7c6553d34442125a6089b82b21fb3da6106e97b26ee660656681aaf0337057a98c30d52b0da8a6fe9a61cad65dd7a3bc0173c72bb999da849e2843e6058eeeb8e2cd23dfda0163a0214f2c15ee6a69326c930b0db16b7ecbe293a9502780547c5e29ce0f6dd97c6e28618e87f40710587d8edec66b44e1cd2ded07af4a4c4f57aa3cb627b9f90f72582f7a1b4b75fd1fad926f8cd3e31235f54eed3165aaa5ae15caa08a48b5648598c78b7bb0791953c268886240b8f9da4bc683e188ec0b8ef7c2df5d7dc1979bda5edaa03647a17d243cb41b577c1b20b4bf8cae059442737bb6a86c454541c5bd623149a2faa750273c5b1a5a4857f2a6e2d64ab9fae1be9e448fa1d01127fd8be64638e120d9c22fdf91e25cdb057b6cf0bad3f81ac0448ed529a6f53bbd68f9b04b1f9560c76a4887310c04e94d1e6eddd1be4dee822a1dcb6793c13212fb6ad28886812b33386304dc385e5f21d529e20b0f0ecdd1ffe584ac1d2d561f723eda07517cce9876e4dcc0350a65daf6e13e0810a49134ab421bb78bcbde4faa691e0e72b1411ccb67797486f05ebb3b14bd8b2c2adaa0e1002f948500beec279a2649045ae0b91db45f7278c7cb11276baa9da3265e34f59ee23ca8083fab5d9bae4cc8e17eee51846bb292f75d8011afe2795bc851a49b30c8ee4b56b92356df23c0edd526850c9c42aa4dc15af96aee5e30f98c3eb48b38ca028b0aeb2026b027b20ea39ed7a2a8c9f9e7a5c9493fff6d846fc318f948be7e81534a02c4f1d1c2d547d1ffa1305abd6249ada879462fa5110985888a6f6ca58faef1f3380cac049402f6609b9db4f922cd1b57d1eb9ade68b1c0966fa13d348ddea82e7eee64fd0fe9c0353dc001488be08bad72a9f68ee578010013d432165f0019bfbe8207d90efd34fb95cc4000cbb1599a9bb65e38cddba5028694763c91adb2ff440f047fdcee302a621fa4963f53411256b911007e4aac45bd28ea2cab6e36cf67005fbe7fb0e15abfc1c63a6aa64504ba21eb0a153c0b6eafc97c973a9af772d3aa92352ca243d60204acc8f982e4dd76a2cfc3dc696568869b02ffda8d6596d81ed8e302c9423fa9680bf28db3ecbe71ac0ee8ff6398b22af42df88309c6b5873f89eac8f26d7feaeca70e643450c10544843a64082d8fc3ae73385798d77bccd2d7a725487968c5b70402f1c8327f1858004cce97aa4ec529bb3dc5814bab7a2a3d4e2e9cbdb9df50c04a6c3499e6718fa35cc0ade01b84b5f30ff3c7f28d97c6e9ac9dc3f024098f5300761b8b53a0e10495ecc96cbb13fe9df8e9b05c063edcb8d68779fb7e55e2c5d95171be59ac8a1bf4381133d532d9b649b5b2cae0f06da7ab12b60a3418c799a1755397886d08aed06ae3fedb87d5f5d9bd005c77d3c41cbea656db5cb46181328c13f23072b0fe0ff8943833dfe664e5fe44a5ad1b6871d8053c31934db28959c36d03ca32045fb2def58cbd90b425d06c473a0ce89ad5892fb4010250e608c8465bd9596c92a3f959801bfcffe8a0d90f6c38c9a1d142cc15781597a59979f5263012848d3e3ba6eeca294c37ae4d647d92aa5700b3b40073a4cb531282aff0a78ba36a132cb00f5583409c6d87da05348373c2813a24435386ddd88dab5bd76160f3e16aa043241d82d4616e2683b3438ec553cf568afc81e7dfb72f64c0cdc3d8c98278da970be59194c936a800fb2bf0e1162db80c22150115113b00d2ebc80633656fd1b47a00990776f4720d04b55ffd2eb683828dd82efb41adc90c4db7ac1222702f7b1708d4e40e094f97df64203677c9d839f7b66555f124d0631eae5e37aa4022fe33fd1157c615af2c24b715290a239a20719f1febd8e0188c91a53c89d4b2156733c85cef46e689ff161101d89fc8225a86220b312d4005f3ec60e89ebb623be17f99de74e0b0e4aa8d44754463d4b966bca80770411baf1283513db4e2a0cbe3dc7941ad933a2f7eafe27b6db2053cda44fd725b9ec1ae1017d9a2fd1c16b2717a9f7bcc80994d852bf28cb558aa8bd7b6730b802256565a88eca2c3bdf0699021934c079e64444d2ea0d95caada515f49720a1bff2814a6ebc9ba6f91fd6ef2e0fe447b66710cba7b8b92be199520e7595e92bb2fd864dde19709a1f799b8020a9a1425ec6244bc81cf9d7b80cad93a3e5e28cfc6b7e73806df836e5e29cdf2b7f9dd352649a03eae3389ae327628525b44c81c7c735365bc0db345e2b4e1f9ff40895d8ffc370387ede045057457798ad7f4a8825bc3be166ba1cd3aae68c59724d1cd63c1246308f3c782499e8aeeb56350585a8a8809012ed654ec15d697903bbcd9dbc2ee31e855fbc40548461c793ded1c0e2a2fef7586eb7246f447b93b39857a5d050df51ed234e391a196dab74d6d47147c9d92b9f0c4a437c2701d6073b2032229b61debad70fc0a8d82096e5d6b5a7a646fff22cf0a9cc17f37dda370ad4b846f4046b220595db08829c01549f04541aad14f4ef24fbdc5b11ae435a5dffea1c7f425096dcc5d2bdb2096b5062dcb186e166ecc408993291a2679c3b49bd7bac89631d2442b5906079062db166d0f04fab4d1922c0fb657a65c5841532c0c3de883cc50fbd31b5c41bf8619123fbf35b91da70eb41dcaba8c0a72ca5b07cdac099bbf4bd3c8ecf23b2370791fb715d17067c4affd312544ba67b73eae31c31845aee0577512acbe27c6632eb84a7f64bab8e023730c0ca0110a000e71bf37ed441081d35ceb0f6f1f09f74b77e27e0bf04b26e2964757113722a1b4c8bce4367b2eb641d585c5982a031e2ed4ba818f1afab19ae6577f91b544cf209b3a47e4ce7d6828e2d201b0cb1a3ddc76aeea4a08308010bbd29b8ebc41a895525c4ab8cc6a3442b2c085e44f2f171c4dbbccb9bc7f11e26ad63d019648d0b912d145bf692a75d73cc6e1bc710ea9e48b3394b86b9963630f7a5ed5589d93f988be3e96b56056a96439b83e33b1d66c1abf8027d7e72fe5844ab431846a3224169caa972aa0499729d30695b8707068d358fee2bd3c505abff06ade95e6c4946a29010f37e90851b8241ed4f645fefbd69c3554f164cbc44a909a425b7ec36daddfa9dfc80f4f00571002a9d994a2e9cef3ffc899d239794c299c6a41ee45a1ab8a8ce44f6b0e182a082d1c960bf885199213bc1aa73915f561bd2ace95c332c3f6f0ad802706026ef8524c56e86947936d121adbfc99d633b0f636098fe8c6781737a2ff67ba5b04ba79b638e0e3fdd1095e40fc0ed8b4c93dc71e9de4bdf7c93904827479888cbdc9d6514da477f61cbf5fa237e44b0be4326dfa3da1efbe448807129598b721e1b1feff22d90654b1ff5cc6b442580cfd2430ba935c2458e7c3cacff2684bb8680a661e42f5753905cd144e5c4e1adac04f578e5e0216cec9d219542489a551598ce282e503b920539d24ac79c7a639b3221cea660c8b5d3e043e7276dd301d169f1a30765898c79339886d89b4af0267b72eb1928f66e5216e8f1ac4e7b6b1522218778621cac7e18c51cfd24c66a1d9bb433db2e02c7ad10eebec74a883600fd3d22cd4156f3e759b3b56396e8cfb300a59c56fc01b8f5b206552c06ace5207137007cb82103f7d4b86ab2f2e25482ef9bc374884a8d23c3603fc6bef78eb7c4217a29d82f7cb29de3e145d8ca2159a1015b78ca24dc4838ed9b375f4eda33b0941df4b231e51928492e399f4e19d5a48476f695169845a1725b7a5b3d17bafc576b9bebced129db215b3b65c2a0873695baa777f86cb8cc02e027e529c1677b9bab25399ba362ed5f8eed06deb99e33bd79092bbc3bae959fc176611b5b322524bcb221bd6fe557d43fa1b855d6d5312a9568c3b91533f716b20e1458ade44a1c7bc8eb0982ffb60a2cbbad08a63c03b73749e13b4ca6d25b9b2dc2da36972ca7ba1faaa0879afff7a6bd751d86ac31bb524177b8a7e1517f9a86875b499e635bd4794337924d46b333018beefda6df9fce41b2a2a3b5561183cf7d53478ae7e4866fbe5d0940915cc17e0fb8c7f293f27506b144f2b170aa9b5494223acc84d64430d73d1f24d7da9c64b4d541dc258bcd7488a6361e83d6cc94399224cd6d4030cca59ab252e46cb31a82ed2803b9303d35c407c8d7022151665a25d10866caeb8dbf3a6937ffe99ed9b097593eb62113ca3437700b1b6afb8a378c467f918960119849ad50852c63d4727f5ddcae4bce04d89ce864c2083ea973c7d80120e43506c285d71473f6792580ef3c8cbc3e0d479307d94b79afbdc444ea1ea84fb0a6c7ea8ee09cb089268e99ef64f52e95ca1ea7aa30abb23203bd1653a90c27311479eca02fc46725d1e31788089e71cf2773d33cfb229730aece4f41edd00aa5c9892e7d0f0db8a203dafb54cf51f70f6a3de8af97f277ec8ac624beb9e40c65268459dc1c127425eb6c5a4de86d4c9a385130458dc99a93ffd4d44ea13f93696d5a83476935869b8587df160c8520e75a378c15b4ad80d1649d9b6f41ebdc4a7e84d4a02d869b71a48ddbad333bcdf418ed54f1f4d23a13989658b3c367ca34c4152ee5276aff5d04c6996d02bad69d5191fd9a49a75bbd7a8527647dff92c8d8c2f5a9252c8b050c16c4015fc6264008832f454d44c92a17d60e068174b7cf415f15efeaa4f676d7622a430eb1e035d1b13dc042c0b072009a0cd2c293c</script>
  <div class="hbe hbe-content">
    <div class="hbe hbe-input hbe-input-default">
      <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass">
      <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass">
        <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hey, password is required here.</span>
      </label>
    </div>
  </div>
</div>
<script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">
    </div>

    
    
    

      <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" rel="tag"># 设计模式</a>
          </div>

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/07.%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E3%80%81%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99%E3%80%81%E7%BC%96%E7%A8%8B%E8%A7%84%E8%8C%83%E3%80%81%E9%87%8D%E6%9E%84%E6%80%BB%E7%BB%93/" rel="prev" title="07.面向对象、设计原则、编程规范、重构技巧总结">
      <i class="fa fa-chevron-left"></i> 07.面向对象、设计原则、编程规范、重构技巧总结
    </a></div>
      <div class="post-nav-item">
    <a href="/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/05.%E5%BF%AB%E9%80%9F%E6%94%B9%E5%96%84%E4%BB%A3%E7%A0%81%E8%B4%A8%E9%87%8F%E7%9A%8420%E6%9D%A1%E8%A7%84%E8%8C%83/" rel="next" title="05.快速改善代码质量的20条规范">
      05.快速改善代码质量的20条规范 <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">zhengyidi</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">39</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
          
        <span class="site-state-item-count">5</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">7</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>
  <div class="links-of-author motion-element">
      <span class="links-of-author-item">
        <a href="https://github.com/zhengyidi" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;zhengyidi" rel="noopener" target="_blank"><i class="fa fa-fw fa-github"></i>GitHub</a>
      </span>
      <span class="links-of-author-item">
        <a href="mailto:zhengyidi1357@gmail.com" title="Contact Me → mailto:zhengyidi1357@gmail.com" rel="noopener" target="_blank"><i class="fa fa-fw fa-envelope"></i>Contact Me</a>
      </span>
  </div>



      </div>
        <div class="back-to-top motion-element">
          <i class="fa fa-arrow-up"></i>
          <span>0%</span>
        </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2021</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">zhengyidi</span>
</div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
  <script src="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/pisces.js"></script>


<script src="/js/next-boot.js"></script>




  




  
<script src="/js/local-search.js"></script>













  

  

</body>
</html>
<!-- 页面点击小红心 -->
<!-- <script type="text/javascript" src="/js/love.js"></script> -->
<!-- 鼠标悬浮 -->
<script type="text/javascript" src="/js/mouse-float.js"></script>

<!-- 鼠标点击爆炸效果 -->
<canvas class="fireworks" style="position: fixed;left: 0;top: 0;z-index: 1; pointer-events: none;" ></canvas> 
<script type="text/javascript" src="/js/fireworks/anime.min.js"></script> 
<script type="text/javascript" src="/js/fireworks/fireworks.js"></script>
